package cc.picc.quota;

import java.util.Optional;

/**
 * 令牌桶，桶的大小是限定的。
 * 
 * @author lijinting01
 *
 * @param <E>
 *            quota的类型
 */
public interface QuotaBucket<E> {
	/**
	 * 从当前桶中弹出一个quota
	 * 
	 * @return 如果桶中已经没有quota，则返回null。
	 */
	Optional<E> pop();

	/**
	 * 往桶中填充quota。
	 * 
	 * @param number
	 *            需要填充的数量，如果数量超出桶的边界，多余的部分会被会丢弃
	 * @return 实际填充的数量，即number-&lt;丢弃掉的quota数量&gt;。
	 */
	int fill(int number);

	/**
	 * 桶的大小
	 * 
	 * @return
	 */
	int size();

	/**
	 * 桶的最大容量
	 * 
	 * @return
	 */
	int capacity();
}
